安卓开发文档翻译:为应用的内容启用深层链接,Enabling Deep Links for App Content
要 想 让谷歌能够索引 妳的应用中的内容, 且允许用户通过搜索结果进入 到妳的应用中, 妳 就必须 在应用的清单文件中针对对应 的活动添加适当的意图过滤器。 这些意图过滤器, 将允许制造出指向 妳的任意活动中内容的 深层链接 。例如 ,用户 可以点击某个深层链接 , 以 在某个购物应用中 查看用户正在搜索 的某个产品的详情页面 。
要想创建一个指向妳的应用中内容的深层链接,则,向清单文件中添加一个意图过滤器,并且要包含以下元素及属性值:
指定 ACTION_VIEW 这个意图动作,这样,这个意图过滤器就能够通过谷歌搜索访问到了。
加入 一个或多个 <data> 标记,其中 ,每个标记代表着 一种URI 格式 , 且解析为某个活动。 <data> 标记 中最少要包含 android:scheme 属性。
妳还可以加入更多的属性,以更精确地定义 该活动接受的URI 类型。例如, 妳可以让多个活动接受相似的URI,但是 ,其中又带有微 小的差别,差别仅在于路径名不同。 在这种情况下,应当使用 android:path 属性 或 它的各个变种( pathPattern 或 pathPrefix ) , 以指定,对于不同的URI 路径,系统应当打开哪个活动。
包含 BROWSABLE 类型 。必须包含 BROWSABLE 类型, 才能使得这个意图过滤器能够通过浏览器访问到。 不包含这个类型的话, 在浏览器中点击链接是不会被解析到妳的应用的。 DEFAULT 类型 是可选的,但是建议妳加上。 不加上这个类型的话, 该活动就只能使用 妳的应用的部件名来构造显式意图进行启动了。
以下XML 代码片断,展示了, 该如何向清单中加入意图过滤器,以支持深层链接。 “ example://gizmos” 和 “ http://www.example.com/gizmos” 两个URI都会解析到这个活动。
<activity
android:name = "com.example.android.GizmosActivity"
android:label = "@string/title_gizmos" >
<intent-filter android:label = "@string/filter_title_viewgizmos" >
<action android:name = "android.intent.action.VIEW" />
<category android:name = "android.intent.category.DEFAULT" />
<category android:name = "android.intent.category.BROWSABLE" />
<!-- 接受 以"http://www.example.com/gizmos”开头的 URI -->
<data android:scheme = "http"
android:host = "www.example.com"
android:pathPrefix = "/gizmos" />
<!-- 注意 ,pathPrefix 中必须带上开头的 "/" -->
<!-- 接受 以"example://gizmos”开头的 URI -->
<data android:scheme = "example"
android:host = "gizmos" />
</intent-filter>
</activity>
当妳向清单文件中加入了带URI的意图过滤器,以指向活动 中的内容之后,安卓系统 就能够在运行时将任何带有相匹配URI的意图 ( Intent ) 指向 妳的应用。
注意 : 意图过滤 器 ,对于每种URI 模式,都只应该包含单个 data 元素 。应当创建多个意图过滤 器来捕获额外 的URI 模式。
欲学习更多关于定义意图过滤器 的知识,则阅读 允许其它应用启动 妳的活动 。
当系统通过意图过滤器启动了妳的活动之后, 就可以使用 该意图( Intent )提供的数据 来决定该显示什么内容。调用 getData() 和 getAction() 方法来获取到传入意图( Intent )中关联的数据和动作。 妳可以在活动的生命周期中任何时刻调用 这些方法,但是 , 一般情况下,应当在早期的回调函数中调用这些方法,例如在 onCreate() 或 onStart() 中。
以下代码片断,展示了,如何从意图( Intent )中获取数据:
@Override
public void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . main );
Intent intent = getIntent ();
String action = intent . getAction ();
Uri data = intent . getData ();
}
应当遵守以下最佳实践,以提升用户体验:
•. 深层链接 ,应当将用户直接带到目标内容页面, 在这个过程中不显示任何提示、空白页或登录界面 。 要确保,即使用户从来 没有打开过该应用,也能够立即查看 到目标内容。 可以在后续的交互过程中,或者在用户通过桌面启动应用时显示对应的提示内容 。 这个原则,与网站中的 初次点击免费 体验是等同的。
•. 遵守 向后及向上导航 中说明的设计指南, 以确保, 在用户通过深层链接进入 妳的应用之后, 它的行为 满足用户对于向后导航 的预期 。
妳可使用 安卓调试桥接 器 及活动管理器(am)来进行测试, 以验证,妳 在意图过滤器中为深层链接所指定的URI是否能够解析到正确的活动中。 妳可针对某个设备或模拟器来执行adb 命令。
使用adb 来测试意图过滤器URI 的一般语法是:
$ adb shell am start
- W - a android . intent . action . VIEW
- d < URI > < PACKAGE >
例如,以下命令,就尝试启动与指定URI 相关联的目标应用活动。
$ adb shell am start
- W - a android . intent . action . VIEW
- d "example://gizmos" com . example . android
女王娜娜
未知美人
Your opinionsHxLauncher: Launch Android applications by voice commands